using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroCaixa : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
		protected SgiDAOT SgiDAOT = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);

                CarregaDDL.carregaCaixaSituacao(ddlSituacao, "CAIXA", true);
                CarregaDDL.carregaCaixaSituacao(ddlCadSituacao, "CAIXA", false);

				atualizarDdlIdFilial(null, null);
				atualizarDdlIdCaixatipo(null, null);
			}

		}

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

		protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
		{
			this.grvResultado.PageIndex = e.NewPageIndex;
			btnPesquisa_Click(null, null);
		}

		protected void atualizarDdlIdFilial(object sender, ImageClickEventArgs e)
		{
            CarregaDDL.carregaFilial(this.SgiDAOT, ddlCadIdFilial);

            CarregaDDL.carregaFilial(this.SgiDAOT, ddlIdFilial);

            atualizarDdlIdCaixatipo(null, null);
		}

		protected void atualizarDdlIdCaixatipo(object sender, ImageClickEventArgs e)
		{
            CarregaDDL.carregaCaixaTipo(this.SgiDAOT, ddlCadIdCaixatipo, Convert.ToInt32(ddlCadIdFilial.SelectedValue));
			
            CarregaDDL.carregaCaixaTipo(this.SgiDAOT, ddlIdCaixatipo, Convert.ToInt32(ddlIdFilial.SelectedValue));
		}


		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			CaixaVO caixaVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdCaixa.Text))
				{
					caixaVO = CaixaVO.CreateVO();
					caixaVO.cadastro = DateTime.Now;
					caixaVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					caixaVO = this.SgiDAOT.getCaixa(Int32.Parse(this.txtCadIdCaixa.Text));
				}

				caixaVO.caixa = this.txtCadCaixa.Text;
				caixaVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
				caixaVO.idCaixatipo = Int32.Parse(this.ddlCadIdCaixatipo.SelectedValue);
				caixaVO.saldo = decimal.Parse(this.txtCadSaldo.Text.Replace(".", ""));
				caixaVO.situacao = Convert.ToChar(this.ddlCadSituacao.SelectedValue);
				caixaVO.edicao = DateTime.Now;
				caixaVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					caixaVO.idCaixa = (int)this.SgiDAOT.newCaixa(caixaVO);
				else
					this.SgiDAOT.setCaixa(caixaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdCaixa.Text = caixaVO.idCaixa.ToString();
				this.ltCadastradoPor.Text = caixaVO.cadastradoPor;
				this.ltEditadoPor.Text = caixaVO.editadoPor;
				this.ltDataCadastro.Text = caixaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = caixaVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idCaixa = null;
			string caixa = null;
			int? idFilial = null;
			int? idCaixatipo = null;
			char? situacao = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdCaixa.Text))
				{
					idCaixa = Int32.Parse(this.txtIdCaixa.Text);
				}

				if (!string.IsNullOrEmpty(this.txtCaixa.Text))
				{
					caixa = this.txtCaixa.Text;
				}

				if(!this.ddlIdFilial.SelectedValue.Equals("-1"))
				{
					idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
				}

				if(!this.ddlIdCaixatipo.SelectedValue.Equals("-1"))
				{
					idCaixatipo = Int32.Parse(this.ddlIdCaixatipo.SelectedValue);
				}

                if (!this.ddlSituacao.SelectedValue.Equals("0"))
				{
                    situacao = Convert.ToChar(this.ddlSituacao.SelectedValue);
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = this.SgiDAOT.getCaixas(idCaixa, caixa, idFilial, idCaixatipo, situacao);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabCaixa.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdCaixa.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdCaixa.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			CaixaVO caixaVO = null;
			int idCaixa = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idCaixa = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				caixaVO = this.SgiDAOT.getCaixa(idCaixa);

				this.txtCadIdCaixa.Text = caixaVO.idCaixa.ToString();
				this.txtCadCaixa.Text = caixaVO.caixa;
				this.ddlCadIdFilial.SelectedValue = caixaVO.idFilial.ToString();
				this.ddlCadIdCaixatipo.SelectedValue = caixaVO.idCaixatipo.ToString();
				this.txtCadSaldo.Text = String.Format("{0:n2}", caixaVO.saldo);
				this.ddlCadSituacao.SelectedValue = caixaVO.situacao.ToString();
				this.ltCadastradoPor.Text = caixaVO.cadastradoPor;
				this.ltEditadoPor.Text = caixaVO.editadoPor;
				this.ltDataCadastro.Text = caixaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = caixaVO.edicao.ToString("dd/MM/yyyy");


				//Habilita tab page do cadastro
				this.tabCaixa.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

            this.ddlCadSituacao.Enabled = false;

			// Trava apenas os text box da PK
			this.txtCadIdCaixa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadCaixa.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);


            this.ddlCadSituacao.Enabled = false;
            this.ddlCadSituacao.SelectedValue = "F";

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";


			// Trava apenas os text box da PK
			this.txtCadIdCaixa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadCaixa.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			CaixaVO caixaVO = null;

			try
			{
				//Cria objeto
				caixaVO = CaixaVO.CreateVO();
				caixaVO.idCaixa = Int32.Parse(this.txtCadIdCaixa.Text);

				// Remove Caixaturno
				List<CaixaturnoVO> caixaturnoVOs = SgiDAOT.getCaixaturnos(null, caixaVO.idCaixa, null, null, null, null, null, null);
				foreach (CaixaturnoVO caixaturnoVO in caixaturnoVOs)
					this.SgiDAOT.delCaixaturno(caixaturnoVO);

				// Remove Caixamvto
				List<CaixamvtoVO> caixamvtoVOs = SgiDAOT.getCaixamvtos(null, null, caixaVO.idCaixa, null, null, null, null, null, null, null);
				foreach (CaixamvtoVO caixamvtoVO in caixamvtoVOs)
					this.SgiDAOT.delCaixamvto(caixamvtoVO);

				//Chama metodo para excluir registro
				this.SgiDAOT.delCaixa(caixaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				

				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}


        protected void ddlCadIdFilial_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdCaixatipo(null, null);
        }


	}
}
